-- 秒杀订单退款还原购买数量等传入的数据格式,对于redis来说,lua是原子性的,有事务的

-- 由于秒杀sku Key对应的就是库存数量，为了防止超卖，这里只插入退款操作记录，等事务结束后再进行实际的库存还原操作
-- 实际还原库存操作时：
-- 1.如果事务回滚，直接删除操作记录即可
-- 2.使用操作时间作为幂等，操作后就删除，重复执行也只会还原一次库存

-- 检验库存信息 这里的key是
local refundId = KEYS[1]
local skuId = KEYS[2]
local pointId = KEYS[3]
local prodCount = tonumber(KEYS[4])
local currentTime = KEYS[5]

local refundLogKey = "mall4j_seckill:order_refund:"
local refundTimeKey = "mall4j_seckill:order_refund_time:"
local refundLockLogKey = "mall4j_product:order_refund_lock_list"

-- 退款最后操作时间
redis.call('set', refundTimeKey..refundId, currentTime)
-- sku锁定记录
redis.call('set', refundLogKey..refundId.."_"..skuId.."_"..pointId.."_"..currentTime, prodCount)
-- 添加退款锁定记录明细
redis.call('rpush', refundLockLogKey, refundId.."_"..currentTime)